package com.heima.leetcode.datastructure.hashtable;

import java.util.HashSet;

/**
 * <strong>找出数组中只出现一次的数字</strong>
 * <p>注：数组中出现一次的数字只有一个，其余都是出现两次的</p>
 * @author 勾新杰
 * @version 1.0
 * @date 2024/9/26 15:58
 */
public class SingleNumber {

    /**
     * <h3>方法一 效率不很高</h3>
     * HashSet插入重复则删除，最后只留一个
     * @param nums 数组
     * @return 返回数组中只出现一次的数字
     */
    public static int singleNumber1(int[] nums) {
        HashSet<Integer> hashSet = new HashSet<>();
        for (int num : nums) {
            if (!hashSet.add(num)){
                hashSet.remove(num);
            }
        }
        return hashSet.iterator().next();
    }

    /**
     * <h3>方法二，异或运算</h3>
     * 全部数字取异或运算，结果就是只出现一次的数字
     * @param nums 数组
     * @return 返回数组中只出现一次的数字
     */
    public static int singleNumber2(int[] nums) {
        int result = 0;
        for (int num : nums) {
            result ^= num;
        }
        return result;
    }
}
